/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.toto.product;

import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.FinderException;

/**
 *
 * @author Administrator
 */
public abstract class ProductBean implements EntityBean
{
  protected EntityContext entityContext;
  public ProductBean()
  {

  }
  //---------------------------------------------
  //*************抽象get/set方法开始**************
  //---------------------------------------------
  public abstract String getName() ;
  public abstract void setName(String name) ;
  public abstract String getDescription();
  public abstract void setDescription(String description) ;
  public abstract double getBasePrice();
  public abstract void setBasePrice(double basePrice);
  public abstract String getProductID();
  public abstract void setProductID(String productID);
  //----------------------------------------------
  //*************抽象get/set方法结束***************
  //----------------------------------------------

  //----------------------------------------------
  //EJB要求规范开始,他们由ejb容器调用，而不是客户代码
  //----------------------------------------------
  public void ejbActive()
  {
    System.out.println("ejbActive() called...");
  }
  /**
   * 在将ejb实体从RDBMS删除前，容器调用这个方法
   * 对于客户，调用home.remote()
   */
  public void ejbRemove()
  {
    System.out.println("ejbRemove() called...");
  }
  /**
   * 由ejb容器调用
   * 释放持有的资源，以完成挂起操作。
   */
  public void ejbPassivate()
  {
    System.out.println("ejbPassivate() called..");
  }
  /**
   * 由ejb容器调用
   * 更新实体Bean，以反映RDBMS中的最新值。
   * 用了cmp，我们不用理会这个方法，容器会在其子类中自动调用。
   */
  public void ejbLoad()
  {
    System.out.println("ejbLoad() called...");
  }
  /**
   * 由容器调用，
   * 更新RDBMS数据，将内存的实体bean数据更新到数据库中。
   * 用了cmp，也不用理会这个方法，ejb容器会在其子类中自动调用。
   */
  public void ejbStore()
  {
    System.out.println("ejbStore() called...");
  }
  /**
   * 由容器调用。
   * 将特定的上下文关联到ejb实例
   * 一旦设置好之后，便可以通过它查询到环境信息。
   * @param entityContext
   */
  public void setEntityContext(EntityContext entityContext)
  {
    System.out.println("setEntityContext called..");
    this.entityContext = entityContext;
  }
  /**
   * 由容器调用
   * 将特定上下文销毁
   */
  public void unsetEntityContext()
  {
    System.out.println("unsetEntityContext() called..");
  }

  /**
   * 在ejbCreate()之后调用
   * 此时，可以从上下文获得ejb对象，并可以用this代替它。
   * @param productID
   * @param name
   * @param description
   * @param basePrice
   */
  public void ejbPostCreate(String productID, String name, String description, double basePrice)
  {
    System.out.println("ejbPostCreate() called...");
  }
  /**
   * 对应home接口中的create()方法，
   * 用于初始化cmp实体bean
   * 
   * 当客户调用home对象的create()方法时，
   * home对象会调用ejbCreate()方法。
   *
   * 我们借助于客户传过来的参数，完成初始化方法。
   * 因此，一旦该方法调用，将会在RDBMS中创建新的数据库记录。
   * @param productID
   * @param name
   * @param description
   * @param basePrice
   * @return
   */
  public ProductPK ejbCreate(String productID, String name, String description, double basePrice) throws CreateException
  {
    System.out.println("ejbCreate() called..");
    setProductID(productID);
    setName(name);
    setDescription(description);
    setBasePrice(basePrice);
    return new ProductPK(productID);
  }
  /**
   * 无find方法(由容器实现)
   */
  public abstract String ejbSelectProductDescription(String name) throws FinderException;
  
  //---------------------------------------------------
  // EJB要求规范结束
  //---------------------------------------------------
}
